package com.company.task;


import java.lang.reflect.Array;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Task3 {
    /**
     * 将字符串转成字符，与对于应的范围比较如果在范围中就在数组元素基础上加+1。
     */
    public  void StatisticsString(){
        String s = "ASDFG12345asdfg!@#$%";
        int[] Statistics2 = new int[4];
        for (int i=0;i<s.length();i++){
            if (s.charAt(i)>='A'&&s.charAt(i)<='Z'){
                Statistics2[0]++;
            }else
            if (s.charAt(i)>='a'&&s.charAt(i)<='z'){
                Statistics2[1]++;
            }else
            if (s.charAt(i)<='9'&&s.charAt(i)>='0'){
                Statistics2[2]++;
            }else {
                Statistics2[3]++;
            }
        }
        System.out.println("大写字符个数："+Statistics2[0]+"\n"+"小写字符个数"+Statistics2[1]+"\n"+"数字符个数"+Statistics2[2]+"\n"+"其他字符个数"+Statistics2[3]);
    }

    /**
     * 1.将字符通过逗号拆分串拆分（Split底层将字符串分成字符，当匹配到对应的字符把该字符之前在组装成字符串放到list 中
     *                                                 如果没有匹配到就返回自身，然后在转成数组（个人理解））
     * 将拆分字符串的数组中
     * 2.遍历数组，将数组的元素当成Map的值，如果有重复的时候 值+1；
     */
    public  void StatisticsString2(){
        String s = "123,456,789,123,456,432,3,3,3,3,3,3,1234,1234,1234";
        String [] a = s.split(",");
        Map<String,Integer> map = new HashMap();
        for (int i=0;i<a.length;i++){
            if (map.containsKey(a[i])){
               int it = map.get(a[i]);
               it++;
               map.put(a[i],it);
            }else {
                map.put(a[i],1);
            }
        }
        System.out.println(map);
    }

    /**
     * 思维步骤：
     * 1，准备1-13整数放到一个容器中（放到数组与放到List中没什么区别因为已经知道类型，如果不知道类型的话需要放到LIst中，因为数组只能放相同的类型）
     * 2，准备4种花色整数放到一个容器中
     * 3.将准备1-13与4种花色组成扑克牌中的54张放到Map集合中，根据Map的存储键值对的特性，能够精准的查找到。
     * 4.将Map的键 取出放到List然后对list（list是有序的，底层是数组，根据下标自增排序，也就是先进后出）操作打乱顺序，
     * 5.准备4个集合  三名玩家一份底牌
     * 6.先拿出3张底牌然后根据对3取余的方式分给三名玩家
     * 7.将玩家手中的通过sort牌进行排序，（sort底层排序算法，大概了解了一下，当length<47的时候用的是插入排序，当大于47小于286的时候用快速排序大于286用的排序发不会）
     * 8.根据List中的元素 再去找Map中对应的键的值。
     */
    public  void  landlords(){
        //准备2-10, A , k-J 张数
        String[] s = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        //  准备四种花色
        List<String> list = new ArrayList();
        list.add("♠");
        list.add("♥");
        list.add("♦");
        list.add("♣");
        //张数+每种花色 = 扑克牌52张 ，两个鬼牌
        Map<Integer,String> map = new HashMap();
        map.put(0,"大王");
        map.put(1,"小王");
        int indexs = 0;
        //将54张牌放入Map中通过Map 键值对存储方式 后期便于快速查找，
        for (int i =0;i<s.length;i++){
            for (String sg:list){
                map.put(indexs+2,sg+s[i]);
                indexs++;
            }
        }

        List<Integer> list1 = new ArrayList();
        //将纸牌的顺序 也就是map 的键存储List 打乱顺序
        for (Integer key:map.keySet()){
            list1.add(key);
        }
        Collections.shuffle(list1);
        //创建 玩家与底牌存储
        List<Integer> w1 = new ArrayList(),w2 = new ArrayList(),w3 = new ArrayList(),dp = new ArrayList();
        for (int i=0;i<list1.size();i++){
            if (i>=51){
                dp.add(list1.get(i));
            }else if (i%3==0){
                w1.add(list1.get(i));
            }else if (i%3==1){
                w2.add(list1.get(i));
            }else if (i%3==2){
                w3.add(list1.get(i));
            }
        }
        System.out.println("--------------------------------没有排序----------------------------------");
        System.out.print("玩家A： [");
        sorts(w1,map);
        System.out.print("玩家B： [");
        sorts(w2,map);
        System.out.print("玩家C： [");
        sorts(w3,map);
        System.out.print("底 牌： [");
        Collections.sort(dp);
        sorts(dp,map);

        System.out.println("---------------------------------排序后----------------------------------");
        Collections.sort(w1);
        System.out.print("玩家A： [");
        sorts(w1,map);
        Collections.sort(w2);
        System.out.print("玩家B： [");
        sorts(w2,map);
        Collections.sort(w3);
        System.out.print("玩家C： [");
        sorts(w3,map);
        Collections.sort(dp);
        System.out.print("底 牌： [");
        sorts(dp,map);

    }
    public  void sorts(List<Integer> dp ,Map<Integer,String> map){
        //通过Map键值对存储结构，通过键找到值
        for (int lkey:dp){
            for (Integer mkey:map.keySet()){
                if (lkey == mkey){
                    System.out.print(" "+map.get(mkey));
                }
            }
        }
        System.out.println(" ]");

    }
}
